#ifndef BASE_DEFS_H
#define BASE_DEFS_H 

#include <string>
#include <vector>
#include "Vectors.h"
#include <hash_map>
#include "Scale.h"

//////////////////////////////////////////////////////////////////////////
//////////////             2014/10/02                       //////////////
//////////////////////////////////////////////////////////////////////////

typedef int SMInt;
typedef unsigned int SMUInt;
typedef long SMLong;
typedef long long SMLongLong;
typedef double SMDouble;
typedef float SMFloat;
typedef std::string SMString;
typedef SMString TypeID;
typedef SMLongLong ID;



#define toDeg(x) ((x) * 57.295779513)
#define toRad(x) ((x) * 0.0174532925)

namespace steam
{
	static const TypeID INVALID_TYPE_ID("STEAM_INVALID_TYPE_ID");
	namespace base
	{
		class IProperty;

		const float PI = 3.14159f;
		const float TWO_PI = 6.28318f;
		const float DEG2RAD = 0.01745f;
		const float RAD2DEG = 57.29577f;

		const Vector3 X(1, 0, 0);
		const Vector3 Y(0, 1, 0);
		const Vector3 Z(0, 0, 1);
		const Vector3 ZERO(0, 0, 0);

		enum TransformSpace
		{
			LOCAL,
			WORLD
		};

		typedef std::vector<IProperty*> IProperties;
		typedef stdext::hash_map<TypeID, IProperty*> IPropertiesMap;

		static const Scale DEFAULT_SCALE(1);
	}
}


#endif //BASE_DEFS_H